package malagaAcoge.controller.beans;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import malagaAcoge.controller.daos.AtencionPrimariaDao;
import malagaAcoge.controller.daos.DemandaDao;
import malagaAcoge.controller.daos.DepartamentoDao;
import malagaAcoge.model.entities.Atencionprimaria;
import malagaAcoge.model.entities.Demanda;
import malagaAcoge.model.entities.Departamento;
import malagaAcoge.model.entities.Tecnico;
import malagaAcoge.model.entities.Usuario;

public class AtencionPrimariaBean {
	private Usuario usuarioSelecionado;
	private Tecnico currentTecnico;
	private Atencionprimaria atencionPrimaria;
	private List<Atencionprimaria> atenciones;
	private String cadenaUsuario;
	private String departamento;
	private String cadenaTecnico;
	private HashMap<String, String> nombreDepartamentos;

	public AtencionPrimariaBean() {
		setCurrentTecnico((Tecnico) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("tecnico"));
		if (getUsuarioSelecionado() == null) {
			atencionPrimaria = new Atencionprimaria();
		}
	}

	public void addAtencionPrimaria() {
		new AtencionPrimariaDao();
		AtencionPrimariaDao.createAtencionprimaria(atencionPrimaria);
		usuarioSelecionado
				.setAtencionprimarias(new ArrayList<Atencionprimaria>());
		usuarioSelecionado.getAtencionprimarias().add(atencionPrimaria);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("usuario", usuarioSelecionado);
		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, new FacesMessage("Exito",
				"Atencion registrada correctamente."));
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {

		this.usuarioSelecionado = usuarioSelecionado;
	}

	public Usuario getUsuarioSelecionado() {
		usuarioSelecionado = (Usuario) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("usuario");
		return usuarioSelecionado;
	}

	public void setCurrentTecnico(Tecnico currentTecnico) {
		this.currentTecnico = currentTecnico;
	}

	public Tecnico getCurrentTecnico() {
		return currentTecnico;
	}

	public void setAtencionPrimaria(Atencionprimaria atencionPrimaria) {
		this.atencionPrimaria = atencionPrimaria;
	}

	public Atencionprimaria getAtencionPrimaria() {
		if (getUsuarioSelecionado() != null) {
			atencionPrimaria = new Atencionprimaria();
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			atencionPrimaria.setUsuarioBean(usuarioSelecionado);
			atencionPrimaria.setTecnicoBean(currentTecnico);
			atencionPrimaria.setFecha(sdf.format(new Date()));
		}
		return atencionPrimaria;
	}

	public void setAtenciones(List<Atencionprimaria> atenciones) {
		this.atenciones = atenciones;
	}

	public List<Atencionprimaria> getAtenciones() {
		if (atenciones==null){
			new AtencionPrimariaDao();
			atenciones= AtencionPrimariaDao.findAll();
		}
		return atenciones;
	}

	public void setCadenaUsuario(String cadenaUsuario) {
		this.cadenaUsuario = cadenaUsuario;
	}

	public String getCadenaUsuario() {
		return cadenaUsuario;
	}

	public HashMap<String, String> getNombreDepartamentos() {
		nombreDepartamentos = new HashMap<String, String>();
		new DepartamentoDao();
		List<Departamento> departamentos = DepartamentoDao.findAll();
		for (Departamento dep : departamentos) {
			nombreDepartamentos.put(dep.getNombre(),
					String.valueOf(dep.getIdDepartamento()));
		}
		return nombreDepartamentos;
	}

	public void setCadenaTecnico(String cadenaTecnico) {
		this.cadenaTecnico = cadenaTecnico;
	}

	public String getCadenaTecnico() {
		return cadenaTecnico;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}

	public String getDepartamento() {
		return departamento;
	}

	public void limpiar() {
		cadenaUsuario = "";
		cadenaTecnico = "";
		departamento = "";
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.remove("cadenaUsuario");
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.remove("cadenaTecnico");
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.remove("departamento");
		atenciones = null;
	}

	public void buscar() {
		new DemandaDao();
		int idDep = 0;
		if (cadenaUsuario == null) {
			cadenaUsuario = "";
		}
		if (cadenaTecnico == null) {
			cadenaTecnico = "";
		}
		if (departamento != null && !departamento.equals("")) {
			idDep = Integer.parseInt(departamento);
		}
		List<Atencionprimaria> aux = getAtenciones();
		atenciones = new ArrayList<Atencionprimaria>();
		for (Atencionprimaria atencionprimaria : aux) {
			String usuario = (atencionprimaria.getUsuarioBean().getNombre() + " " + atencionprimaria
					.getUsuarioBean().getApellidos()).toUpperCase();
			String tecnico = (atencionprimaria.getTecnicoBean().getNombre() + " " + atencionprimaria
					.getTecnicoBean().getApellidos()).toUpperCase();
			if (idDep == 0) {
				if (usuario.contains(cadenaUsuario.toUpperCase())
						&& tecnico.toUpperCase().contains(
								cadenaTecnico.toUpperCase())) {
					atenciones.add(atencionprimaria);
				}
			} else {
				int id = atencionprimaria.getTecnicoBean().getDepartamentoBean()
						.getIdDepartamento();
				if (usuario.contains(cadenaUsuario.toUpperCase())
						&& tecnico.contains(cadenaTecnico.toUpperCase())
						&& idDep == id) {
					atenciones.add(atencionprimaria);
				}
			}
		}
	}
}
